<?php  
	// Definir a pasta padrão
	$baseDir = 'uploads/';
	$abriDir = ($_GET['dir'] != '' ? $_GET['dir'] : $baseDir);
	// Informando para o php que isso e um diretorio
	$openDir = dir($abriDir);
	// Variaveis para voltar o diretorio
	$strrdir = strrpos(substr($abriDir, 0, -1), '/'); // Conta até a penultima barra para voltar
	$backdir = substr($abriDir,0,$strrdir+1); // começa em zero e vai até a variavel $strrdir, assim voltando o diretorio

// Validação para criar diretorio
if (isset($_POST['senddir'])) :
	$novapasta = $_POST['pasta']; // Armazenando o nome da pasta	
	//Agora temos que verificar se pasta existe ou não
	if (!file_exists($abriDir.$novapasta)) { // se não existir entao vamos criar a pasta
		mkdir($abriDir.$novapasta, 0777); // Permissão da pasta
	}else{
		echo "Pasta já existe";
	}
endif;

// Validação para enviar arquivos
if (isset($_POST['sendfile'])):
	$arquivo = $_FILE['newarq']; // Armazenando na variavel
	// Pegando o nome da extensão automaticamente do arquivo enviado
	$strrfile = strrpos($arquivo['name'],'.'); // Aqui vai retornar o ultimo ponto o que e da extensão
	$arqext = substr($arquivo['name'], $strrfile); // Agora temos o nome final da extensão
	$arqName = md5(time()).$arqext; // Previnindo que os nomes não se repitam
	move_uploaded_file($arquivo['tmp_name'], $abriDir.'/'.$arqName);
endif;

// Validação para excluir arquivos
if(!empty($_GET['del'])){ // Negando o empty pois nao pode ser vazio, tem que ter algo
	$del = $_GET['del'];
	// Agora vamos verificar se e um arquivo ou uma pasta
	if(is_dir($del) && file_exists($del)){ // Verificamos se e um diretorio e se ele existe
		// Veja que estou tratando agora, pois (!), ou seja se nao excluir vou adcionar uma mensagem 
		if(!@rmdir($del)){ // função nativa do php para excluir pasta, o (@) antes e para não exibir erro
			echo '
				<div class="alert">
				  <button type="button" class="close" data-dismiss="alert">Erro a pasta deve está vazia!</button>
				  <strong>
				</div>
			';
		}else{
			header('Location: dir.php?dir='.$abriDir); // Header location nos redireciona para o mesmo local apos excluir
		}
	}elseif(!is_dir($del) && file_exists($del)){ // Se não e diretorio então e um arquivo, veja a negação
		if(unlink($del)){ // função nativa do php, para exclusão de arquivo
			header('Location: dir.php?dir='.$abriDir);
		}else{ // No caso de der erro ao excluir o arqivo, mas isso nao acontecera pois o unlink remove de qulquer maneira
			echo '
				<div class="alert">
				  <button type="button" class="close" data-dismiss="alert">Erro ao excluir arquivo!</button>
				  <strong>
				</div>
			';
		}
	}
} 

//
if(isset($_POST['sendup'])){
	// variaveis contendo o caminho para update
	$arquivo = $_POST['adir'];
	$newarq =  $_POST['mdir'];

	// Validando se vai ser arquivo ou pasta
	if (is_dir($arquivo) && file_exists($arquivo)) {
		rename($arquivo, $abriDir.$newarq);
	}elseif(!is_dir($arquivo) && file_exists($arquivo)){ // se for diferente de $arquivo e o arquivo existir
		// Pegando o nome da extensão automaticamente do arquivo enviado
		$strrfile = strrpos($arquivo,'.'); // Aqui vai retornar o ultimo ponto o que e da extensão
		$arqext = substr($arquivo, $strrfile); // Agora temos o nome final da extensão
		$arqName = $newarq.$arqext; // Previnindo que os nomes não se repitam
		rename($arquivo, $abriDir.$arqName);
	}
}
?>
<!DOCTYPE html>
<html lang="pr-bt" dir="ltr">
	<head>
		<meta charset="utf-8" />
		<title>Sistema com Twitter Bootstrap</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<meta name="description" content="Descrição" />
		<meta name="keywords" content="Palavras-chaves" />
		<meta name="author" content="Astésio José Do Carmo Júnior" />
		<meta name="generator" content="HTML-kit 292" />
		<meta name="robots" content="all" />
		<link rel="stylesheet" href="css/reset.css" />
		<link rel="stylesheet" href="css/bootstrap.min.css" />
		<link rel="stylesheet" href="css/bootstrap-responsive.min.css" />
		<link rel="stylesheet" href="css/template.css" />
		<!--[if lt IE 8]>
  			<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
		<![endif]-->
		<!--modernizer-->
		<script src="js/modernizr.custom.56142.js"></script>
	</head>
<body>
<?php

	if(empty($_GET['upd'])){
		echo '
			<form name="cadastra" action="" method="post" enctype="multipart/form-data">
				<fieldset class="well">
					<span>Nome da Pasta:</span>
					<input type="text" name="pasta" />
					<input type="submit" value="Criar Pasta" name="senddir" class="btn btn-primary" />
				</fieldset>
				<br />
				<fieldset class="well">
					<input type="file" name="newarq"  />
					<input type="submit" value="Enviar arquivo" name="sendfile" class="btn btn-primary" />
				</fieldset
			</form>
		';
	}

echo'
	<form name="" action="" method="post">
		<fieldset class="well">
			<span><strong>Renomear:</strong>'.$_GET['upd'].'</span>
			<input type="hidden" name="adir" value="'.$_GET['upd'].'" />
			<input type="text" name="mdir" value="" />
			<input type="submit" name="sendup" value="Atualizar" class="btn btn-primary" />
		</fieldeset>
	</form>	
';

	$openDir = dir($abriDir);  // Aqui e para evitar de ter que atualizar o php quando criar uma pasta, dessa maneira
	// ele mostra o nome da pasta em tempo real 
 
echo '<div class="container-fluid">'; // Isso aqui não vai repetir
	echo '<div class="row-fluid">';
		echo '<div class="span12">';
			echo '<table width="100%" class="table table-bordered">';
				// Temos que fazer o loop para realmente fazer isso
				while ($arq = $openDir->read()): // Cetando a variavel para fazer a leitura do diretorio
					
					// Condição para não deixar voltar da pasta uploads
					if($arq != '.' && $arq != '..'): 
						
						// Agora temos que indentificar quando for uma pasta, para isso usamos uma função nativa do
						// php, is_dir(), então se for um diretorio não faz nada, senão exibe.
						if(is_dir($abriDir.$arq)){ // Aqui eu indentifico qual caminho dentro da função nativa php
							echo '<tbody>';
								echo '<tr>';
									echo '<td>'.$arq.'</td>';
									echo '<td> <a href="dir.php?dir='.$abriDir.$arq.'/">Abrir</a> </td>'; // Aqui passamos o diretorio via URL
									echo '<td> <a href="dir.php?del='.$abriDir.$arq.'&dir='.$abriDir.'">Excluir</a> </td>';
									echo '<td> <a href="dir.php?upd='.$abriDir.$arq.'&dir='.$abriDir.'">Atualizar</a> </td>';
								echo '</tr>';
							echo '</tbody>';

						}else{ // Para ver os arquivos
							echo '<tbody>';
								echo '<tr>';
									echo '<td>'.$arq.'</td>';
									echo '<td> <a href="'.$abriDir.$arq.'">Ver</a> </td>'; // Aqui eu vou acessar diretamente esse 
									echo '<td> <a href="dir.php?del='.$abriDir.$arq.'&dir='.$abriDir.'">Excluir</a> </td>';
									echo '<td> <a href="dir.php?upd='.$abriDir.$arq.'&dir='.$abriDir.'">Atualizar</a> </td>';
								echo '</tr>';
							echo '</tbody>';
						}
					endif; // fim do nosso while

				endwhile; // Termina nosso while 
			echo '</table>';

			// Agora temos que ter o botão de voltar
			if($abriDir != $baseDir){
				echo '<a href="dir.php?dir='.$backdir.'"><i class="icon-print icon-white"></i>Voltar</a>';
			}

		echo '</div><!-- span12 -->';
	echo '</div><!-- row-fluid -->';
echo '</div><!-- container-fluid -->';

	// Apos abrir o diretorio temos que fechalo para isso precisamos de cetalo
	$openDir->close();
 ?>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js"></script>
</html>